/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import Model.Establishments;
import Model.ProductBrands;
import Model.ProductCategories;
import Model.ProductProbes;
import Model2.Categorias;
import Model2.Establecimientos;
import Model2.Productos;
import Pojos.CategoriasPojo;
import Pojos.EstablecimientosPojo;
import Pojos.JsonPojo;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.MapModel;
import utils.Utils;

/**
 *
 * @author ODHeroes
 */
@ManagedBean(name = "establecimientosController")
@SessionScoped
public class establecimientosController {

    String url_establecimientos = "http://api.gobiernoabierto.gob.sv/shopping_establishments";
    String campos_establecimientos = "address,"
            + "city_id,"
            + "code,"
            + "created_at,"
            + "id,"
            + "latitude,"
            + "longitude,"
            + "name,"
            + "phone,"
            + "updated_at";
    String url_categorias = "http://api.gobiernoabierto.gob.sv/product_categories";
    String campos_categorias = "category_id,"
            + "code,"
            + "created_at,"
            + "id,"
            + "name,"
            + "updated_at";
    String url_productos = "http://api.gobiernoabierto.gob.sv/product_probes";
    String campos_productos = "created_at,"
            + "id,"
            + "offer_price,"
            + "price,"
            + "probe_date,"
            + "product_brand_id,"
            + "product_id,"
            + "product_presentation_id,"
            + "shopping_establishment_id,"
            + "updated_at";

    Utils utils;
    List<String> lista;
    Object obj;

    private MapModel mapa = new DefaultMapModel();

    private Establecimientos establecimientos;
    private Categorias categorias;
    private Productos productos;

    private EstablecimientosPojo establepojo = new EstablecimientosPojo();

    public Object getJson6(String url, String campos) {
        utils = new Utils();
        lista = utils.arrayToList(campos.split(","));
        return utils.getJSON(url, lista);
    }

    public Date formatofecha(String fecha) throws ParseException {
        Date fechaformat = null;
        SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd");
        fechaformat = dt.parse(fecha);
        return fechaformat;
    }

    public List<EstablecimientosPojo> getJson5() throws ParseException {
        obj = getJson6(url_establecimientos, campos_establecimientos);
        List<EstablecimientosPojo> listaestablecimiento = new ArrayList<EstablecimientosPojo>();

        for (JsonPojo aux : (List<JsonPojo>) obj) {
            establecimientos = new Establecimientos();

            establecimientos.setAddress(("" + aux.getHijos().get(0).getValue()) != null ? ("" + aux.getHijos().get(0).getValue()) : null);
            establecimientos.setCity_id("" + aux.getHijos().get(1).getValue());
            establecimientos.setCode("" + aux.getHijos().get(2).getValue());
            establecimientos.setCreated_at(aux.getHijos().get(3).getValue() != null ? formatofecha(aux.getHijos().get(3).getValue().toString().substring(0, 10)) : null);
            establecimientos.setId(Integer.parseInt(aux.getHijos().get(4).getValue() + ""));
            establecimientos.setLatitude(aux.getHijos().get(5).getValue() != null ? (double) aux.getHijos().get(5).getValue() : null);
            establecimientos.setLongitude(aux.getHijos().get(6).getValue() != null ? (double) aux.getHijos().get(6).getValue() : null);
            establecimientos.setName("" + aux.getHijos().get(7).getValue());
            establecimientos.setPhone("" + aux.getHijos().get(8).getValue());
            establecimientos.setUpdated_at(aux.getHijos().get(9).getValue() != null ? formatofecha(aux.getHijos().get(9).getValue().toString().substring(0, 10)) : null);
            establepojo.setEstablecimientos(establecimientos);
            establepojo.setCategorias(getJson7(url_categorias, campos_categorias));
            listaestablecimiento.add(establepojo);
        }
        return listaestablecimiento;
    }

    public List<CategoriasPojo> getJson7(String url_categorias, String campos_categorias) throws ParseException {
        obj = getJson6(url_categorias, campos_categorias);
        List<CategoriasPojo> listacategorias = new ArrayList<CategoriasPojo>();
        CategoriasPojo categpojo = new CategoriasPojo();

        for (JsonPojo aux : (List<JsonPojo>) obj) {
            categorias = new Categorias();
            categorias.setCategory_id(aux.getHijos().get(0).getValue() != null ? Integer.parseInt("" + aux.getHijos().get(0).getValue()) : null);
            categorias.setCode("" + aux.getHijos().get(1).getValue());
            categorias.setCreated_at(aux.getHijos().get(2).getValue() != null ? formatofecha(aux.getHijos().get(2).getValue().toString().substring(0, 10)) : null);
            categorias.setId(aux.getHijos().get(3).getValue() != null ? Integer.parseInt("" + aux.getHijos().get(3).getValue()) : null);
            categorias.setName("" + aux.getHijos().get(4).getValue());
            categorias.setUpdated_at(aux.getHijos().get(5).getValue() != null ? formatofecha(aux.getHijos().get(5).getValue().toString().substring(0, 10)) : null);

            categpojo.setCategorias(categorias);
            categpojo.setProductos(getJson8(url_productos + "", campos_productos));
            listacategorias.add(categpojo);
        }

        return listacategorias;
    }

    public List<Productos> getJson8(String url_productos, String campos_productos) throws ParseException {
        obj = getJson6(url_productos, campos_productos);
        List<Productos> listaproductos = new ArrayList<Productos>();
        for (JsonPojo aux : (List<JsonPojo>) obj) {
            productos = new Productos();
            productos.setCreated_at(formatofecha(aux.getHijos().get(0).getValue().toString().substring(0, 10)));
            productos.setId(Integer.parseInt("" + aux.getHijos().get(1).getValue()));
            productos.setOffer_price(aux.getHijos().get(2).getValue() != null ? (double) aux.getHijos().get(2).getValue() : null);
            productos.setPrice(aux.getHijos().get(3).getValue() != null ? (double) (aux.getHijos().get(3).getValue()) : null);
            productos.setCreated_at(aux.getHijos().get(4).getValue() != null ? formatofecha(aux.getHijos().get(4).getValue().toString().substring(0, 10)) : null);
            productos.setProduct_brand_id(aux.getHijos().get(5).getValue() != null ? Integer.parseInt("" + aux.getHijos().get(5).getValue()) : null);
            productos.setProduct_id(aux.getHijos().get(6).getValue() != null ? Integer.parseInt("" + aux.getHijos().get(6).getValue()) : null);
            productos.setProduct_presentation_id(aux.getHijos().get(7).getValue() != null ? Integer.parseInt("" + aux.getHijos().get(7).getValue()) : null);
            productos.setShopping_establishment_id(aux.getHijos().get(8).getValue() != null ? Integer.parseInt("" + aux.getHijos().get(8).getValue()) : null);
            productos.setUpdated_at(aux.getHijos().get(9).getValue() != null ? formatofecha(aux.getHijos().get(9).getValue().toString().substring(0, 10)) : null);
            listaproductos.add(productos);
        }
        return listaproductos;
    }

}
